几分钟让外行了解软件开发
软件开发,是一个重度依赖脑力的行业。
客户特点, 上来就三句话:
- 能不能做
- 多少钱
- 多长时间
这三个问题都很难以得到准确的回答.因为几乎所有的销售(外包公司) 和 项目负责人(非外包公司)都会说: 能做! 哪怕他之前根本没接触过这类技术.
多少钱也很难获得准确的数字. 因为需要先估算工作量.
多长时间做完也难说, 因为需求不明确.
所以, 先清晰,简单扼要的表达出你的需求, 对方才能给出靠谱的答案.
客户的第二个特点: 一句话需求
- 我要做个跟淘宝差不多的商城.
- 我要做个能聊天的app,跟微信那样
- 我要做个能发帖子的app, 跟微博那样.
如果你的需求还停留在这个阶段, 赶紧细化一下! 具体见: 所见即所得设计法
这个行业的项目成功率是不高的.
目前还没有一个准确的数据, 估计将来也很难有. 因为很少有人会自曝家丑. 更不愿意承认自己的项目是失败的而惹上麻烦.
很难量化工作量
例如,在传统行业(如家装)中,一个贴砖工人的工作量,我们可以按照平米来计算。 铺砖到地面,王师傅一天铺100平米, 李师傅一天铺120平米,我们可以知道李师傅铺的好。
因为这个活儿大家都能做,所以市场上的价格也比较透明。一平米40块是标价。
但是软件开发中,几乎每个功能都是自定义的。例如:
软件开发是重度自定义的。
曾经有前辈(Rational rose) 提到过模块理论。在1980年代左右提出,意思是20年后的 软件开发将会特别简单。大家只要使用 模块化的思想,把软件中的一个个“螺丝”生产出来, 那么软件中的可重用的模块将会越来越多,一段时间之后的软件开发工程师都不需要写新 代码了,直接把现有的组件组装起来就好了。
甚至 Rational rose 的做法,就是让架构师设计好架构,一点按钮,整个实现代码就自动 生成了。
当时这个思想风靡了软件行业。
但是这个想法经过现实的检验,是根本无法可行的。 因为在当今的互联网浪潮中,每个用户都对软件的需求不同。
难于对软件系统做分解。
你是把你的功能分成: 论坛,博客,CMS?这样的大模块?
还是把它们继续细化,比如,把论坛分成:
- 注册
- 登陆
- 发帖子
- 回帖子
两条路都难走。 开源项目有很多, 随便google一个 CMS, 会出现上千个开源CMS项目。 但是只要你试用一下,就会发现,适合你的太少。要么页面风格不对,要么功能跟你想的 不一样。要是改的话,嘿嘿。你又掉到坑里了。
参考: 开源项目之坑
所以,我认为软件项目最多细化到 “螺丝钉”的层面,例如:
- 开发框架, 例如: rails
- 最常见的组件,例如:上传功能,第三方登陆,支付(例如支付宝)
99%的内容都无法重用。 就算是同样的一个财务软件,在不同的公司用起来都完全不同的。
万能的办公司自动化系统? 难以重用!
曾经有朋友咨询过这样的需求,希望做这样的事:
发出一套万能的办公自动化系统(Office Automation,简称OA),然后卖个各个企业. 这个想法特别符合国家的政策。
想一想就是不可能的。比如,同样的一套财务软件,在两个公司内用起来就完全不同。 有的公司是实报实销, 有的公司是先借款。
而很多专门开发财务软件的公司,都会专门为用户组织培训,让他们使用自己定义好的流程。
所以千万不要幻想开发出一套万能的办公司自动化系统, 这个事情永远不存在。